Passed
Push — task/laravel-breadcrumbs ( 3beccb...a96280 )
by Yonathan
10:46 queued 10s
created

reliability.js ➔ clone   F

Complexity

Conditions 73

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 73
eloc 8
dl 0
loc 13
rs 0
c 0
b 0
f 0

How to fix   Complexity   

Complexity

Complex classes like reliability.js ➔ clone often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
// Clone Playground: JavaScript
2
jQuery(document).ready(function($) {
3
  // Clone Stuff
4
  // Clone Shorthand =============================================================
5
  function clone(attr, option, selector) {
6
    if (option != null) {
7
      if (selector != null) {
8
        return `[data-c-${attr}${selector}='${option}']`;
9
      }
10
      return `[data-c-${attr}='${option}']`;
11
    }
12
    return `[data-c-${attr}]`;
13
  }
14
  // Dialog Sizing -------------------------------------------------------
15
  function dialogSizing(dialog) {
16
    const viewportHeight = $(window).height();
17
    if (dialog != null) {
18
      const dialogHeight =
19
        $(dialog)
20
          .children("div")
21
          .height() + 50;
22
      if (dialogHeight > viewportHeight) {
23
        $(dialog).attr("data-c-dialog", "active--overflowing");
24
      } else {
25
        $(dialog).attr("data-c-dialog", "active--contained");
26
      }
27
    } else {
28
      $(clone("dialog")).each(function() {
29
        if ($(this).attr("data-c-dialog") == false) {
30
          return false;
31
        }
32
        const dialogHeight =
33
          $(this)
34
            .children("div")
35
            .height() + 50;
36
        if (dialogHeight > viewportHeight) {
37
          $(this).attr("data-c-dialog", "active--overflowing");
38
        } else {
39
          $(this).attr("data-c-dialog", "active--contained");
40
        }
41
      });
42
    }
43
  }
44
45
  // Age of Consent ==============================================================
46
  $("[data-gc-parent-guardian-consent-trigger]").on("click", function() {
47
    if ($(this).hasClass("active")) {
48
    } else {
49
      // Trigger this elements stuff.
50
      $(this).addClass("active");
51
      $("[data-gc-parent-guardian-consent]").removeClass("hidden");
52
      // Remove alternative option's stuff.
53
      $("[data-gc-personal-consent-trigger]").removeClass("active");
54
      $("[data-gc-personal-consent]").addClass("hidden");
55
    }
56
  });
57
58
  $("[data-gc-personal-consent-trigger]").on("click", function() {
59
    if ($(this).hasClass("active")) {
60
    } else {
61
      // Trigger this elements stuff.
62
      $(this).addClass("active");
63
      $("[data-gc-personal-consent]").removeClass("hidden");
64
      // Remove alternative option's stuff.
65
      $("[data-gc-parent-guardian-consent-trigger]").removeClass("active");
66
      $("[data-gc-parent-guardian-consent]").addClass("hidden");
67
    }
68
  });
69
70
  // Birth Name ==================================================================
71
  $("[data-gc-birth-name-same-trigger]").on("click", function() {
72
    if ($(this).hasClass("active")) {
73
    } else {
74
      // Trigger this elements stuff.
75
      // Remove alternative option's stuff.
76
      $("[data-gc-birth-name-different-trigger]").removeClass("active");
77
      $("[data-gc-birth-name-different]").addClass("hidden");
78
    }
79
  });
80
81
  $("[data-gc-birth-name-different-trigger]").on("click", function() {
82
    if ($(this).hasClass("active")) {
83
    } else {
84
      // Trigger this elements stuff.
85
      $(this).addClass("active");
86
      $("[data-gc-birth-name-different]").removeClass("hidden");
87
      // Remove alternative option's stuff.
88
      $("[data-gc-birth-name-same-trigger]").removeClass("active");
89
      $("[data-gc-birth-name-same]").addClass("hidden");
90
    }
91
  });
92
93
  // Legal Names =================================================================
94
  $("[data-gc-legal-name-same-trigger]").on("click", function() {
95
    if ($(this).hasClass("active")) {
96
    } else {
97
      // Trigger this elements stuff.
98
      // Remove alternative option's stuff.
99
      $("[data-gc-legal-name-different-trigger]").removeClass("active");
100
      $("[data-gc-legal-name-different]").addClass("hidden");
101
    }
102
  });
103
104
  $("[data-gc-legal-name-different-trigger]").on("click", function() {
105
    if ($(this).hasClass("active")) {
106
    } else {
107
      // Trigger this elements stuff.
108
      $(this).addClass("active");
109
      $("[data-gc-legal-name-different]").removeClass("hidden");
110
      // Remove alternative option's stuff.
111
      $("[data-gc-legal-name-same-trigger]").removeClass("active");
112
      $("[data-gc-legal-name-same]").addClass("hidden");
113
    }
114
  });
115
116
  // Repeater ----------------------------------------------------------------
117
118
  // Citizenship =================================================================
119
  $("[data-gc-citizen-true-trigger]").on("click", function() {
120
    if ($(this).hasClass("active")) {
121
    } else {
122
      // Trigger this elements stuff.
123
      // Remove alternative option's stuff.
124
      $("[data-gc-citizen-false-trigger]").removeClass("active");
125
      $("[data-gc-citizen-false]").addClass("hidden");
126
    }
127
  });
128
129
  $("[data-gc-citizen-false-trigger]").on("click", function() {
130
    if ($(this).hasClass("active")) {
131
    } else {
132
      // Trigger this elements stuff.
133
      $(this).addClass("active");
134
      $("[data-gc-citizen-false]").removeClass("hidden");
135
      // Remove alternative option's stuff.
136
      $("[data-gc-citizen-true-trigger]").removeClass("active");
137
      $("[data-gc-citizen-true]").addClass("hidden");
138
    }
139
  });
140
141
  // Multiple Citizenship ========================================================
142
  $("[data-gc-multiple-citizen-true-trigger]").on("click", function() {
143
    if ($(this).hasClass("active")) {
144
    } else {
145
      // Trigger this elements stuff.
146
      $(this).addClass("active");
147
      $("[data-gc-multiple-citizen-true]").removeClass("hidden");
148
      // Remove alternative option's stuff.
149
      $("[data-gc-multiple-citizen-false-trigger]").removeClass("active");
150
      $("[data-gc-multiple-citizen-false]").addClass("hidden");
151
    }
152
  });
153
154
  $("[data-gc-multiple-citizen-false-trigger]").on("click", function() {
155
    if ($(this).hasClass("active")) {
156
    } else {
157
      // Trigger this elements stuff.
158
      // Remove alternative option's stuff.
159
      $("[data-gc-multiple-citizen-true-trigger]").removeClass("active");
160
      $("[data-gc-multiple-citizen-true]").addClass("hidden");
161
    }
162
  });
163
164
  // Born Outside the Country ====================================================
165
  $("[data-gc-home-select]").on("click", function() {
166
    if ($(this).val() === "Canada") {
167
      $("[data-gc-foreign-born]").addClass("hidden");
168
    } else {
169
      $("[data-gc-foreign-born]").removeClass("hidden");
170
    }
171
  });
172
173
  // Naturalization ==============================================================
174
  $("[data-gc-naturalization-true-trigger]").on("click", function() {
175
    if ($(this).hasClass("active")) {
176
    } else {
177
      // Trigger this elements stuff.
178
      $(this).addClass("active");
179
      $("[data-gc-naturalization-true]").removeClass("hidden");
180
      // Remove alternative option's stuff.
181
      $("[data-gc-naturalization-false-trigger]").removeClass("active");
182
      $("[data-gc-naturalization-false]").addClass("hidden");
183
    }
184
  });
185
186
  $("[data-gc-naturalization-false-trigger]").on("click", function() {
187
    if ($(this).hasClass("active")) {
188
    } else {
189
      // Trigger this elements stuff.
190
      $(this).addClass("active");
191
      $("[data-gc-naturalization-false]").removeClass("hidden");
192
      // Remove alternative option's stuff.
193
      $("[data-gc-naturalization-true-trigger]").removeClass("active");
194
      $("[data-gc-naturalization-true]").addClass("hidden");
195
    }
196
  });
197
198
  // Naturalization w/ Citizenship ===============================================
199
  $("[data-gc-naturalization-application-true-trigger]").on(
200
    "click",
201
    function() {
202
      if ($(this).hasClass("active")) {
203
      } else {
204
        // Trigger this elements stuff.
205
        $(this).addClass("active");
206
        $("[data-gc-naturalization-application-true]").removeClass("hidden");
207
        // Remove alternative option's stuff.
208
        $("[data-gc-naturalization-application-false-trigger]").removeClass(
209
          "active",
210
        );
211
        $("[data-gc-naturalization-application-false]").addClass("hidden");
212
      }
213
    },
214
  );
215
216
  $("[data-gc-naturalization-application-false-trigger]").on(
217
    "click",
218
    function() {
219
      if ($(this).hasClass("active")) {
220
      } else {
221
        // Trigger this elements stuff.
222
        $(this).addClass("active");
223
        $("[data-gc-naturalization-application-false]").removeClass("hidden");
224
        // Remove alternative option's stuff.
225
        $("[data-gc-naturalization-application-true-trigger]").removeClass(
226
          "active",
227
        );
228
        $("[data-gc-naturalization-application-true]").addClass("hidden");
229
      }
230
    },
231
  );
232
233
  // Previous Screening ==========================================================
234
235
  // Applications
236
  $("[data-gc-screen-apply-true-trigger]").on("click", function() {
237
    if ($(this).hasClass("active")) {
238
    } else {
239
      // Trigger this elements stuff.
240
      $(this).addClass("active");
241
      $("[data-gc-screen-apply-true]").removeClass("hidden");
242
      // Remove alternative option's stuff.
243
      $("[data-gc-screen-apply-false-trigger]").removeClass("active");
244
      $("[data-gc-screen-apply-false]").addClass("hidden");
245
    }
246
  });
247
248
  $("[data-gc-screen-apply-false-trigger]").on("click", function() {
249
    if ($(this).hasClass("active")) {
250
    } else {
251
      // Trigger this elements stuff.
252
      $(this).addClass("active");
253
      $("[data-gc-screen-apply-false]").removeClass("hidden");
254
      // Remove alternative option's stuff.
255
      $("[data-gc-screen-apply-true-trigger]").removeClass("active");
256
      $("[data-gc-screen-apply-true]").addClass("hidden");
257
    }
258
  });
259
260
  // Granted
261
  $("[data-gc-screen-granted-true-trigger]").on("click", function() {
262
    if ($(this).hasClass("active")) {
263
    } else {
264
      // Trigger this elements stuff.
265
      $(this).addClass("active");
266
      $("[data-gc-screen-granted-true]").removeClass("hidden");
267
      // Remove alternative option's stuff.
268
      $("[data-gc-screen-granted-false-trigger]").removeClass("active");
269
      $("[data-gc-screen-granted-false]").addClass("hidden");
270
    }
271
  });
272
273
  $("[data-gc-screen-granted-false-trigger]").on("click", function() {
274
    if ($(this).hasClass("active")) {
275
    } else {
276
      // Trigger this elements stuff.
277
      $(this).addClass("active");
278
      $("[data-gc-screen-granted-false]").removeClass("hidden");
279
      // Remove alternative option's stuff.
280
      $("[data-gc-screen-granted-true-trigger]").removeClass("active");
281
      $("[data-gc-screen-granted-true]").addClass("hidden");
282
    }
283
  });
284
285
  // Revoked
286
  $("[data-gc-screen-revoked-true-trigger]").on("click", function() {
287
    if ($(this).hasClass("active")) {
288
    } else {
289
      // Trigger this elements stuff.
290
      $(this).addClass("active");
291
      $("[data-gc-screen-revoked-true]").removeClass("hidden");
292
      // Remove alternative option's stuff.
293
      $("[data-gc-screen-revoked-false-trigger]").removeClass("active");
294
      $("[data-gc-screen-revoked-false]").addClass("hidden");
295
    }
296
  });
297
298
  $("[data-gc-screen-revoked-false-trigger]").on("click", function() {
299
    if ($(this).hasClass("active")) {
300
    } else {
301
      // Trigger this elements stuff.
302
      $(this).addClass("active");
303
      $("[data-gc-screen-revoked-false]").removeClass("hidden");
304
      // Remove alternative option's stuff.
305
      $("[data-gc-screen-revoked-true-trigger]").removeClass("active");
306
      $("[data-gc-screen-revoked-true]").addClass("hidden");
307
    }
308
  });
309
310
  // Denied
311
  $("[data-gc-screen-denied-true-trigger]").on("click", function() {
312
    if ($(this).hasClass("active")) {
313
    } else {
314
      // Trigger this elements stuff.
315
      $(this).addClass("active");
316
      $("[data-gc-screen-denied-true]").removeClass("hidden");
317
      // Remove alternative option's stuff.
318
      $("[data-gc-screen-denied-false-trigger]").removeClass("active");
319
      $("[data-gc-screen-denied-false]").addClass("hidden");
320
    }
321
  });
322
323
  $("[data-gc-screen-denied-false-trigger]").on("click", function() {
324
    if ($(this).hasClass("active")) {
325
    } else {
326
      // Trigger this elements stuff.
327
      $(this).addClass("active");
328
      $("[data-gc-screen-denied-false]").removeClass("hidden");
329
      // Remove alternative option's stuff.
330
      $("[data-gc-screen-denied-true-trigger]").removeClass("active");
331
      $("[data-gc-screen-denied-true]").addClass("hidden");
332
    }
333
  });
334
335
  // Current Address =============================================================
336
  $("[data-gc-current-address-trigger]").on("click", function() {
337
    if ($(this).hasClass("active")) {
338
      $(this).removeClass("active");
339
      $("[data-gc-current-address]").removeClass("hidden");
340
    } else {
341
      // Trigger this elements stuff.
342
      $(this).addClass("active");
343
      $("[data-gc-current-address]").addClass("hidden");
344
    }
345
  });
346
347
  // Current Experience ==========================================================
348
  $("[data-gc-current-experience-trigger]").on("click", function() {
349
    if ($(this).hasClass("active")) {
350
      $(this).removeClass("active");
351
      $("[data-gc-current-experience]").removeClass("hidden");
352
    } else {
353
      // Trigger this elements stuff.
354
      $(this).addClass("active");
355
      $("[data-gc-current-experience]").addClass("hidden");
356
    }
357
  });
358
359
  // Experience Unemployment
360
  $("[data-gc-experience-unemployed-true-trigger]").on("click", function() {
361
    if ($(this).hasClass("active")) {
362
    } else {
363
      // Trigger this elements stuff.
364
      $(this).addClass("active");
365
      $("[data-gc-experience-unemployed-true]").removeClass("hidden");
366
      // Remove alternative option's stuff.
367
      $("[data-gc-experience-unemployed-false-trigger]").removeClass("active");
368
      $("[data-gc-experience-unemployed-false]").addClass("hidden");
369
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
370
    }
371
  });
372
373
  $("[data-gc-experience-unemployed-false-trigger]").on("click", function() {
374
    if ($(this).hasClass("active")) {
375
    } else {
376
      // Trigger this elements stuff.
377
      $(this).addClass("active");
378
      $("[data-gc-experience-unemployed-false]").removeClass("hidden");
379
      // Remove alternative option's stuff.
380
      $("[data-gc-experience-unemployed-true-trigger]").removeClass("active");
381
      $("[data-gc-experience-unemployed-true]").addClass("hidden");
382
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
383
    }
384
  });
385
386
  // Experience Dismissal
387
  $("[data-gc-experience-dismissal-true-trigger]").on("click", function() {
388
    if ($(this).hasClass("active")) {
389
    } else {
390
      // Trigger this elements stuff.
391
      $(this).addClass("active");
392
      $("[data-gc-experience-dismissal-true]").removeClass("hidden");
393
      // Remove alternative option's stuff.
394
      $("[data-gc-experience-dismissal-false-trigger]").removeClass("active");
395
      $("[data-gc-experience-dismissal-false]").addClass("hidden");
396
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
397
    }
398
  });
399
400
  $("[data-gc-experience-dismissal-false-trigger]").on("click", function() {
401
    if ($(this).hasClass("active")) {
402
    } else {
403
      // Trigger this elements stuff.
404
      $(this).addClass("active");
405
      $("[data-gc-experience-dismissal-false]").removeClass("hidden");
406
      // Remove alternative option's stuff.
407
      $("[data-gc-experience-dismissal-true-trigger]").removeClass("active");
408
      $("[data-gc-experience-dismissal-true]").addClass("hidden");
409
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
410
    }
411
  });
412
413
  // Experience Supervisor
414
  $("[data-gc-experience-supervisor-true-trigger]").on("click", function() {
415
    if ($(this).hasClass("active")) {
416
    } else {
417
      // Trigger this elements stuff.
418
      $(this).addClass("active");
419
      $("[data-gc-experience-supervisor-true]").removeClass("hidden");
420
      // Remove alternative option's stuff.
421
      $("[data-gc-experience-supervisor-false-trigger]").removeClass("active");
422
      $("[data-gc-experience-supervisor-false]").addClass("hidden");
423
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
424
    }
425
  });
426
427
  $("[data-gc-experience-supervisor-false-trigger]").on("click", function() {
428
    if ($(this).hasClass("active")) {
429
    } else {
430
      // Trigger this elements stuff.
431
      $(this).addClass("active");
432
      $("[data-gc-experience-supervisor-false]").removeClass("hidden");
433
      // Remove alternative option's stuff.
434
      $("[data-gc-experience-supervisor-true-trigger]").removeClass("active");
435
      $("[data-gc-experience-supervisor-true]").addClass("hidden");
436
      dialogSizing($('[data-c-dialog][data-c-dialog-id="experience-dialog"]'));
437
    }
438
  });
439
440
  // Reference Work/Education
441
  $("[data-gc-reference-work-true-trigger]").on("click", function() {
442
    if ($(this).hasClass("active")) {
443
    } else {
444
      // Trigger this elements stuff.
445
      $(this).addClass("active");
446
      $("[data-gc-reference-work-true]").removeClass("hidden");
447
      // Remove alternative option's stuff.
448
      $("[data-gc-reference-work-false-trigger]").removeClass("active");
449
      $("[data-gc-reference-work-false]").addClass("hidden");
450
    }
451
  });
452
453
  $("[data-gc-reference-work-false-trigger]").on("click", function() {
454
    if ($(this).hasClass("active")) {
455
    } else {
456
      // Trigger this elements stuff.
457
      $(this).addClass("active");
458
      $("[data-gc-reference-work-false]").removeClass("hidden");
459
      // Remove alternative option's stuff.
460
      $("[data-gc-reference-work-true-trigger]").removeClass("active");
461
      $("[data-gc-reference-work-true]").addClass("hidden");
462
    }
463
  });
464
465
  // Record
466
  $("[data-gc-record-true-trigger]").on("click", function() {
467
    if ($(this).hasClass("active")) {
468
    } else {
469
      // Trigger this elements stuff.
470
      $(this).addClass("active");
471
      $("[data-gc-record-true]").removeClass("hidden");
472
      // Remove alternative option's stuff.
473
      $("[data-gc-record-false-trigger]").removeClass("active");
474
      $("[data-gc-record-false]").addClass("hidden");
475
    }
476
  });
477
478
  $("[data-gc-record-false-trigger]").on("click", function() {
479
    if ($(this).hasClass("active")) {
480
    } else {
481
      // Trigger this elements stuff.
482
      $(this).addClass("active");
483
      $("[data-gc-record-false]").removeClass("hidden");
484
      // Remove alternative option's stuff.
485
      $("[data-gc-record-true-trigger]").removeClass("active");
486
      $("[data-gc-record-true]").addClass("hidden");
487
    }
488
  });
489
});
490